#include "cbb_verify_add8.h"
#include <string.h>

uint32_t
cbb_verify_add8_calculate(uint8_t *pu8Data, uint32_t u32Len, uint32_t u32Offset){

    // 计算校验码
    uint8_t u8Sum = 0;
    for(uint32_t i=u32Offset;i<u32Len;i++) u8Sum += pu8Data[i];
    
    // 返回校验码
    return u8Sum;
}

uint8_t
cbb_verify_add8_check(uint8_t *pu8Data, uint32_t u32Len, uint32_t u32Offset){

    // 校验参数
    if(NULL == pu8Data || 0 == u32Len) return 0;

    // 提取校验码
    uint8_t u8OriSum = pu8Data[u32Len - 1];

    // 计算校验码
    uint8_t u8Sum = cbb_verify_add8_calculate(pu8Data, u32Len - 1, u32Offset);

    // 比较校验码
    return (u8OriSum == u8Sum);
}

uint8_t
cbb_verify_add8_append(uint8_t *pu8Data, uint32_t *pu32Len, uint32_t u32Offset){

    // 校验参数
    if(NULL == pu8Data || NULL == pu32Len || 0 == *pu32Len) return 0;

    // 计算校验码
    uint8_t u8Sum = cbb_verify_add8_calculate(pu8Data, *pu32Len, u32Offset);

    // 追加校验码
    pu8Data[*pu32Len] = u8Sum;
    *pu32Len = *pu32Len + 1;

    // 追加成功
    return 1;
}
